# GF_PY312_CLASS_Pillow_10.py
# Create by GF 2025-04-11 11:40

import io
import base64
# ..................................................
from PIL import Image

# ##################################################

class Pillow_10(object):

    def Image_to_Base64(File_Name:str) -> str:
    
        # Requirement: base64 (Python 3.12.0)
        #
        # 图片 Base64 编码将图片数据转换为 ASCII 字符串, 便于网络传输和存储。
        # Base64 编码后的图片表现为一串以 data:image/[格式];base64, 开头的字符串,
        # 其中 "[格式]" 为图片原始格式 (如png, jpg等), 紧接着的是 Base64 编码后的图片数据。
        # 如: "..."
        # 实现流程:
        # - 1. 分块: 将图片二进制数据按每 6 位一组进行分块。由于大多数图片文件大小远大于 6 位,
        #     需要对数据进行填充 (通常使用等号 "="), 使其长度能够被 6 整除。
        # - 2. 索引映射: 将每组 6 位二进制数据转换为其在 Base64 字符集中对应的字符。
        #     Base64 字符集包括大小写字母、数字和两个特殊符号 (+、/), 每个字符代表一个 6 位二进制数。
        # - 3. 拼接: 将所有字符拼接成一个连续的字符串, 即为图片的 Base64 编码结果。
    
        File = open(File_Name, mode="rb")
        # ..............................................
        Encoded_Image = base64.b64encode(File.read()).decode('utf-8')
        # ..............................................
        File.close()
        # ..............................................
        return Encoded_Image
    
    def Base64_to_Image(Base64_String:str):
    
        # Requirement: io (Python 3.12.0), base64 (Python 3.12.0), PIL (Pillow 10)
        #
        # Returns:
        # - <PIL.PngImagePlugin.PngImageFile image mode=P size=840x840 at 0x192C5AF7F50>
    
        Image_Data = base64.b64decode(Base64_String)
        # ..............................................
        Image_IO = io.BytesIO(Image_Data)
        # ..............................................
        img = Image.open(Image_IO)
        # ..............................................
        return img

# EOF Signed by GF.
